This document contains figures and statistics used for ERP analyses

source('ana/shared.R')
source('ana/learningRates.R')
source('ana/permutationTtest.R')
source('ana/directionMoves.R')

Early vs. Late conditions

Error Feedback Processing

We time-locked to the feedback onset, or after the participants have performed the reaching movement. For these set of analyses we include 10 fronto-central-parietal electrodes:

FCz, F3, Fz, F4, C3, Cz, C4, P3, Pz, P4

We then baseline 100 ms prior to the feedback onset and compare signal differences from the feedback onset until 1 second after. We compare whether two signals are statistically different from each other by implementing cluster-based permutation statistics. If the difference between two signals for a given set of timepoints exceed a T-value threshold, then these timepoints are identified as clusters (indicated in plots below as light-shaded bars). However, after running 1000 permutations, these clusters are deemed significant if the probability of a difference occurring is not merely due to chance. These significant clusters are what we report in the manuscript and are indicated in the plots below as solid bars.

We compare signals across conditions in three steps. First, we compare whether each early or late condition in each perturbation type is different from the aligned condition. Next, we calculate difference waves between each condition and the aligned condition, such that we can compare early and late conditions directly. Finally, we calculate difference waves between early and late conditions in each perturbation type, such that we can compare across perturbation types.

Comparison to aligned reaches (baseline)

plotPermTestEarlyLateERPs()

getEarlyLateERPPvalStats(comparison='vsAligned', erps='frn')
##     X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1   0  earlyrot               6            76      0.030    0.375    0.003
## 2   1  earlyrot              78           129      0.390    0.640    0.040
## 3   2  earlyrot             146           201      0.730    1.000    0.027
## 4   3   laterot               4            12      0.020    0.055    0.148
## 5   4   laterot              15            71      0.075    0.350    0.018
## 6   5   laterot              78           201      0.390    1.000    0.003
## 7   6  earlyrdm               6           110      0.030    0.545    0.002
## 8   7  earlyrdm             149           150      0.745    0.745    0.400
## 9   8  earlyrdm             156           159      0.780    0.790    0.294
## 10  9  earlyrdm             163           164      0.815    0.815    0.400
## 11 10  earlyrdm             175           176      0.875    0.875    0.399
## 12 11  earlyrdm             181           196      0.905    0.975    0.121
## 13 12   laterdm               2            66      0.010    0.325    0.002
## 14 13   laterdm             172           177      0.860    0.880    0.315
## 15 14   laterdm             179           201      0.895    1.000    0.074
## 16 15  earlymir               5            65      0.025    0.320    0.002
## 17 16  earlymir              93            97      0.465    0.480    0.282
## 18 17  earlymir              99           116      0.495    0.575    0.083
## 19 18  earlymir             122           126      0.610    0.625    0.292
## 20 19  earlymir             154           156      0.770    0.775    0.390
## 21 20  earlymir             160           163      0.800    0.810    0.331
## 22 21  earlymir             171           201      0.855    1.000    0.038
## 23 22   latemir               2            79      0.010    0.390    0.006
## 24 23   latemir              81           201      0.405    1.000    0.003

Comparison between early and late training

plotPermTestEarlyLateDiffWaves()

getEarlyLateERPPvalStats(comparison='EarlyvsLate', erps='frn')
##   X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1 0       rot              11            69      0.055     0.34    0.010
## 2 1       rdm              13            15      0.065     0.07    0.419
## 3 2       rdm              34           109      0.170     0.54    0.006
## 4 3       rdm             112           115      0.560     0.57    0.392
## 5 4       mir              NA            NA         NA       NA       NA

We find differences between early and late conditions in only the fixed and random rotation perturbations. These differences show a more positive peak for early training around 250 ms post-feedback.

Comparison across perturbation types

plotPermTestPTypeEarlyLateDiffWaves()

getEarlyLateERPPvalStats(comparison='PerturbTypeComp', erps='frn')
##   X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1 0   rotvmir              28            34       0.14    0.165    0.256
## 2 1   rotvmir              38            55       0.19    0.270    0.114
## 3 2   rotvmir              70            72       0.35    0.355    0.442
## 4 3   rotvrdm              74            77       0.37    0.380    0.378
## 5 4   rotvrdm              90            94       0.45    0.465    0.363
## 6 5   mirvrdm              62           103       0.31    0.510    0.031

We find a significant cluster showing a difference between mirror and random conditions. This is likely due to the lack of a difference between early and late in the mirror condition, but the presence of the effect in the random perturbation. Although clusters were identified in comparing fixed rotation with mirror, these were not significant.

P3 component (Exploratory)

This is also time-locked to feedback onset, but only considers electrodes along the midline:

FCz, Fz, Cz, Pz

Comparison to aligned reaches (baseline)

plotPermTestEarlyLateP3()

Comparison between early and late training

plotPermTestEarlyLateDiffWavesP3()

Similar to our analyses including more electrodes, we observe a more positive peak for early training around 250 ms post-feedback in fixed and random rotation perturbations, but not in the mirror perturbation.

Comparison across perturbation types

plotPermTestPTypeEarlyLateDiffWavesP3()

The mirror and random perturbation conditions show a difference after 250 ms post-feedback.

Movement Preparation Processing

We time-locked to the go signal onset, which occurs 1 second after target onset. For these set of analyses, we include C3 and C4 electrodes (motor areas in both hemispheres).

We then baseline 300 ms prior to the target onset and compare signal differences from the target onset until the go signal onset (1 sec duration). We compare conditions using the same statistical procedure and analyses steps mentioned in the feedback error processing section.

Readiness Potential (RP)

Comparison to aligned reaches (baseline)

plotPermTestEarlyLateRP()

getEarlyLateERPPvalStats(comparison='vsAligned', erps='rp')
##     X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1   0  earlyrot              29            32     -0.855   -0.845    0.505
## 2   1  earlyrot              77            81     -0.615   -0.600    0.391
## 3   2   laterot              99           105     -0.505   -0.480    0.227
## 4   3   laterot             110           142     -0.450   -0.295    0.019
## 5   4   laterot             144           146     -0.280   -0.275    0.454
## 6   5   laterot             149           164     -0.255   -0.185    0.077
## 7   6  earlyrdm              82           106     -0.590   -0.475    0.066
## 8   7  earlyrdm             114           141     -0.430   -0.300    0.057
## 9   8  earlyrdm             146           180     -0.270   -0.105    0.046
## 10  9  earlyrdm             185           188     -0.075   -0.065    0.433
## 11 10   laterdm             141           144     -0.295   -0.285    0.503
## 12 11   laterdm               0             2     -1.000   -0.995    0.544
## 13 12   laterdm              16            19     -0.920   -0.910    0.503
## 14 13   laterdm              32            35     -0.840   -0.830    0.466
## 15 14   laterdm              47            52     -0.765   -0.745    0.345
## 16 15   laterdm              57            59     -0.715   -0.710    0.543
## 17 16  earlymir              87            91     -0.565   -0.550    0.422
## 18 17  earlymir             103           106     -0.485   -0.475    0.503
## 19 18  earlymir             119           131     -0.405   -0.350    0.158
## 20 19  earlymir             132           138     -0.340   -0.315    0.324
## 21 20  earlymir             145           148     -0.275   -0.265    0.512
## 22 21  earlymir             150           156     -0.250   -0.225    0.297
## 23 22  earlymir             174           184     -0.130   -0.085    0.203
## 24 23   latemir             118           125     -0.410   -0.380    0.202
## 25 24   latemir             162           164     -0.190   -0.185    0.407
## 26 25   latemir             173           181     -0.135   -0.100    0.180

Comparison between early and late training

plotPermTestEarlyLateRPDiffWaves()

getEarlyLateERPPvalStats(comparison='EarlyvsLate', erps='rp')
##     X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1   0       rot              28            34     -0.860   -0.835    0.227
## 2   1       rot              36            39     -0.820   -0.810    0.368
## 3   2       rot             109           119     -0.455   -0.410    0.140
## 4   3       rot             123           137     -0.385   -0.320    0.089
## 5   4       rot             149           159     -0.255   -0.210    0.148
## 6   5       rot             171           201     -0.145    0.000    0.036
## 7   6       rdm               0             1     -1.000   -1.000    0.509
## 8   7       rdm              11            14     -0.945   -0.935    0.445
## 9   8       rdm              15            21     -0.925   -0.900    0.289
## 10  9       rdm              56            60     -0.720   -0.705    0.337
## 11 10       rdm              64            67     -0.680   -0.670    0.444
## 12 11       rdm              79           101     -0.605   -0.500    0.071
## 13 12       rdm             126           132     -0.370   -0.345    0.288
## 14 13       rdm             166           180     -0.170   -0.105    0.107
## 15 14       rdm             186           201     -0.070    0.000    0.114
## 16 15       mir              71            73     -0.645   -0.640    0.571

We find that the late condition for the fixed rotation perturbation is more positive, around 100 ms prior to the go signal onset.

Comparison across perturbation types

plotPermTestPTypeEarlyLateRPDiffWaves()

getEarlyLateERPPvalStats(comparison='PerturbTypeComp', erps='rp')
##     X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1   0   rotvmir             133           134     -0.335   -0.335    0.461
## 2   1   rotvmir             152           154     -0.240   -0.235    0.411
## 3   2   rotvmir             181           184     -0.095   -0.085    0.375
## 4   3   rotvrdm               0             2     -1.000   -0.995    0.327
## 5   4   rotvrdm               9            13     -0.955   -0.940    0.287
## 6   5   rotvrdm              32            39     -0.840   -0.810    0.193
## 7   6   rotvrdm              44            54     -0.780   -0.735    0.140
## 8   7   rotvrdm              56            61     -0.720   -0.700    0.222
## 9   8   rotvrdm              65            66     -0.675   -0.675    0.366
## 10  9   rotvrdm              78            83     -0.610   -0.590    0.223
## 11 10   rotvrdm              86           106     -0.570   -0.475    0.073
## 12 11   rotvrdm             110           119     -0.450   -0.410    0.157
## 13 12   rotvrdm             123           136     -0.385   -0.325    0.103
## 14 13   rotvrdm             151           159     -0.245   -0.210    0.178
## 15 14   rotvrdm             164           201     -0.180    0.000    0.031
## 16 15   mirvrdm              10            12     -0.950   -0.945    0.537
## 17 16   mirvrdm              14            22     -0.930   -0.895    0.193
## 18 17   mirvrdm              33            37     -0.835   -0.820    0.353
## 19 18   mirvrdm              94           100     -0.530   -0.505    0.293

We find a difference between rotation and random perturbations, likely driven by the difference observed between early and late training in the fixed rotation perturbation.

Lateralized Readiness Potential (LRP)

We observed that the RPs were lateralized for trials in which participants either moved to the right or left side of the workspace. That is, C3 showed a more negative RP than C4, for movements to the right of the workspace, while this was flipped for movements to the left of the workspace. This effect seems more pronounced in the aligned condition, but is still observed for the average activity shown in the other perturbation types.

plotWorkspaceLRPs()

Notably, we only observe this effect for targets located near the horizontal axis. That is, the effect goes away if we consider the targets near the vertical axis. As such, we calculate Lateralized RPs: (right C3 - right C4) - (left C3 - left C4), and only consider epochs where participants had to move either to the left or right of the workspace.

Comparison to aligned reaches (baseline)

plotPermTestEarlyLateLRPs()

getEarlyLateERPPvalStats(comparison='vsAligned', erps='lrp')
##     X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1   0   laterdm              28            35     -0.860   -0.830    0.142
## 2   1   laterdm              55            61     -0.725   -0.700    0.169
## 3   2   laterdm              88            92     -0.560   -0.545    0.311
## 4   3   laterdm             103           105     -0.485   -0.480    0.472
## 5   4   laterdm             109           119     -0.455   -0.410    0.106
## 6   5   laterdm             127           133     -0.365   -0.340    0.197
## 7   6   laterdm             199           201     -0.005    0.000    0.498
## 8   7  earlyrot               3             4     -0.985   -0.985    0.633
## 9   8  earlyrot              66            67     -0.670   -0.670    0.665
## 10  9  earlyrot              76            87     -0.620   -0.570    0.067
## 11 10  earlyrot              91           105     -0.545   -0.480    0.064
## 12 11  earlyrot             118           127     -0.410   -0.370    0.143
## 13 12  earlyrot             134           145     -0.330   -0.280    0.100
## 14 13  earlyrot             151           157     -0.245   -0.220    0.229
## 15 14  earlyrot             177           181     -0.115   -0.100    0.370
## 16 15   laterot              31            36     -0.845   -0.825    0.303
## 17 16  earlymir              27            32     -0.865   -0.845    0.192
## 18 17  earlymir              53            57     -0.735   -0.720    0.272
## 19 18  earlymir              63            72     -0.685   -0.645    0.095
## 20 19  earlymir              83            88     -0.585   -0.565    0.192
## 21 20  earlymir             105           106     -0.475   -0.475    0.666
## 22 21   latemir              26            32     -0.870   -0.845    0.144
## 23 22   latemir              49            51     -0.755   -0.750    0.633
## 24 23   latemir              66            69     -0.670   -0.660    0.549
## 25 24   latemir              70            76     -0.650   -0.625    0.169

Comparison between early and late training

plotPermTestEarlyLateLRPDiffWaves()

getEarlyLateERPPvalStats(comparison='EarlyvsLate', erps='lrp')
##   X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1 0       rot              30            35     -0.850   -0.830    0.213
## 2 1       rot               1             4     -0.995   -0.985    0.469
## 3 2       rdm              88            90     -0.560   -0.555    0.483
## 4 3       rdm              97           101     -0.515   -0.500    0.305
## 5 4       mir               0             2     -1.000   -0.995    0.519

Comparison across perturbation types

plotPermTestPTypeEarlyLateLRPDiffWaves()

getEarlyLateERPPvalStats(comparison='PerturbTypeComp', erps='lrp')
##   X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1 0   rotvmir               0             3     -1.000   -0.990    0.291
## 2 1   rotvmir              30            35     -0.850   -0.830    0.251
## 3 2   rotvrdm              88            90     -0.560   -0.555    0.524
## 4 3   rotvrdm              97           102     -0.515   -0.495    0.245
## 5 4   mirvrdm               0             2     -1.000   -0.995    0.453
## 6 5   mirvrdm               7            11     -0.965   -0.950    0.237
## 7 6   mirvrdm              86            90     -0.570   -0.555    0.297
## 8 7   mirvrdm              98           102     -0.510   -0.495    0.297

We do not find any differences across conditions for LRPs.

Small vs. Large conditions

Error Feedback Processing

We repeat the same analyses steps as the ones above, however, we now split the data according to small and large errors.

Comparison to aligned reaches (baseline)

plotPermTestSmallLargeERPs()

getSmallLargeERPPvalStats(comparison = 'vsAligned', erps = 'frn')
##     X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1   0  smallrot               4           201      0.020    1.000    0.001
## 2   1  largerot               1             6      0.005    0.025    0.296
## 3   2  largerot              14            64      0.070    0.315    0.007
## 4   3  largerot             178           191      0.890    0.950    0.157
## 5   4  largerot             193           200      0.965    0.995    0.237
## 6   5  smallrdm               1           112      0.005    0.555    0.001
## 7   6  smallrdm             122           201      0.610    1.000    0.007
## 8   7  largerdm               5            64      0.025    0.315    0.004
## 9   8  largerdm             193           197      0.965    0.980    0.344
## 10  9  smallmir               0           201      0.000    1.000    0.001
## 11 10  largemir               4            56      0.020    0.275    0.005
## 12 11  largemir             144           201      0.720    1.000    0.003

Comparison between small and large error conditions

plotPermTestSmallLargeDiffWaves()

getSmallLargeERPPvalStats(comparison = 'SmallvsLarge', erps = 'frn')
##     X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1   0       rot              62            68      0.310    0.335    0.228
## 2   1       rot              74            79      0.370    0.390    0.259
## 3   2       rot              84           101      0.420    0.500    0.091
## 4   3       rot             104           170      0.520    0.845    0.007
## 5   4       rdm              14            16      0.070    0.075    0.528
## 6   5       rdm              56           184      0.280    0.915    0.002
## 7   6       mir              12            14      0.060    0.065    0.386
## 8   7       mir              42           128      0.210    0.635    0.007
## 9   8       mir             129           137      0.645    0.680    0.206
## 10  9       mir             141           153      0.705    0.760    0.155
## 11 10       mir             157           166      0.785    0.825    0.186

Trials where a small error is experienced show a sustained positivity post-feedback in all perturbation conditions. However, this difference seems to occur at a later timepoint for the fixed rotation.

Comparison across perturbation types

plotPermTestPTypeSmallLargeDiffWaves()

getSmallLargeERPPvalStats(comparison = 'PerturbTypeComp', erps = 'frn')
##   X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1 0   rotvmir              42            47      0.210    0.230    0.301
## 2 1   rotvmir              53            54      0.265    0.265    0.543
## 3 2   rotvrdm              NA            NA         NA       NA       NA
## 4 3   mirvrdm              NA            NA         NA       NA       NA

However, there are no differences when comparing across perturbations.

P3 component (Exploratory)

Comparison to aligned reaches (baseline)

plotPermTestSmallLargeP3()

Comparison between small and large errors

plotPermTestSmallLargeDiffWavesP3()

Comparison across perturbation types

plotPermTestPTypeSmallLargeDiffWavesP3()

We do not find any differences when comparing across perturbation types.

Movement Preparation Processing

Readiness Potential (RPs)

Comparison to aligned reaches (baseline)

plotPermTestSmallLargeRP()

getSmallLargeERPPvalStats(comparison = 'vsAligned', erps = 'rp')
##     X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1   0  smallrot             100           104     -0.500   -0.485    0.392
## 2   1  smallrot             117           136     -0.415   -0.325    0.043
## 3   2  smallrot              15            17     -0.925   -0.920    0.552
## 4   3  smallrot              77            79     -0.615   -0.610    0.575
## 5   4  largerot             152           153     -0.240   -0.240    0.625
## 6   5  largerot              77            78     -0.615   -0.615    0.629
## 7   6  smallrdm             109           110     -0.455   -0.455    0.551
## 8   7  smallrdm             114           134     -0.430   -0.335    0.060
## 9   8  smallrdm             139           140     -0.305   -0.305    0.551
## 10  9  smallrdm             159           161     -0.205   -0.200    0.463
## 11 10  smallrdm               0             3     -1.000   -0.990    0.373
## 12 11  largerdm             120           125     -0.400   -0.380    0.321
## 13 12  largerdm             149           151     -0.255   -0.250    0.553
## 14 13  largerdm             163           167     -0.185   -0.170    0.387
## 15 14  largerdm              26            37     -0.870   -0.820    0.148
## 16 15  largerdm              48            53     -0.760   -0.740    0.276
## 17 16  smallmir             103           106     -0.485   -0.475    0.362
## 18 17  smallmir             116           130     -0.420   -0.355    0.106
## 19 18  smallmir             134           138     -0.330   -0.315    0.351
## 20 19  smallmir             150           201     -0.250    0.000    0.013
## 21 20  largemir              NA            NA         NA       NA       NA

Comparison between small and large errors

plotPermTestSmallLargeRPDiffWaves()

getSmallLargeERPPvalStats(comparison = 'SmallvsLarge', erps = 'rp')
##   X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1 0       rot              41            43     -0.795   -0.790    0.614
## 2 1       rot              99           101     -0.505   -0.500    0.613
## 3 2       rdm              49            52     -0.755   -0.745    0.361
## 4 3       rdm              90            94     -0.550   -0.535    0.265
## 5 4       mir              NA            NA         NA       NA       NA

We find no differences between small and large errors during movement preparation across perturbation types.

Comparison across perturbation types

plotPermTestPTypeSmallLargeRPDiffWaves()

getSmallLargeERPPvalStats(comparison = 'PerturbTypeComp', erps = 'rp')
##   X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1 0   rotvmir              NA            NA         NA       NA       NA
## 2 1   rotvrdm              33            35     -0.835   -0.830    0.523
## 3 2   rotvrdm              49            52     -0.755   -0.745    0.387
## 4 3   rotvrdm              90            93     -0.550   -0.540    0.449
## 5 4   mirvrdm              91            93     -0.545   -0.540    0.520

We find no differences across perturbation types during movement preparation.

Lateralized Readiness Potential (LRPs)

Comparison to aligned reaches (baseline)

plotPermTestSmallLargeLRPs()

getSmallLargeERPPvalStats(comparison = 'vsAligned', erps = 'lrp')
##     X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1   0  smallrdm              27            29     -0.865   -0.860    0.450
## 2   1  smallrdm              31            37     -0.845   -0.820    0.167
## 3   2  smallrdm              53            59     -0.735   -0.710    0.139
## 4   3  smallrdm              61            69     -0.695   -0.660    0.125
## 5   4  smallrdm              78            83     -0.610   -0.590    0.195
## 6   5  smallrdm              92            94     -0.540   -0.535    0.463
## 7   6  smallrdm             103           104     -0.485   -0.485    0.495
## 8   7  smallrdm             111           113     -0.445   -0.440    0.442
## 9   8  smallrdm             129           132     -0.355   -0.345    0.360
## 10  9  smallrdm             154           155     -0.230   -0.230    0.507
## 11 10  smallrdm             175           177     -0.125   -0.120    0.412
## 12 11  largerdm              27            35     -0.865   -0.830    0.118
## 13 12  largerdm              57            58     -0.715   -0.715    0.636
## 14 13  largerdm              66            72     -0.670   -0.645    0.207
## 15 14  largerdm              86            88     -0.570   -0.565    0.591
## 16 15  largerdm             127           130     -0.365   -0.355    0.472
## 17 16  largerdm             149           151     -0.255   -0.250    0.601
## 18 17  largerdm             196           199     -0.020   -0.010    0.498
## 19 18  smallrot              31            37     -0.845   -0.820    0.195
## 20 19  smallrot              67            69     -0.665   -0.660    0.566
## 21 20  smallrot              80            81     -0.600   -0.600    0.618
## 22 21  smallrot              99           102     -0.505   -0.495    0.469
## 23 22  smallrot             112           123     -0.440   -0.390    0.107
## 24 23  smallrot             131           142     -0.345   -0.295    0.113
## 25 24  smallrot             153           157     -0.235   -0.220    0.385
## 26 25  smallrot             197           199     -0.015   -0.010    0.576
## 27 26  largerot               0             5     -1.000   -0.980    0.228
## 28 27  largerot              24            25     -0.880   -0.880    0.641
## 29 28  largerot              35            38     -0.825   -0.815    0.405
## 30 29  largerot              55            60     -0.725   -0.705    0.276
## 31 30  largerot              62            69     -0.690   -0.660    0.182
## 32 31  largerot              76            88     -0.620   -0.565    0.067
## 33 32  largerot              89            95     -0.555   -0.530    0.238
## 34 33  largerot              99           107     -0.505   -0.470    0.138
## 35 34  largerot             119           126     -0.405   -0.375    0.178
## 36 35  largerot             137           146     -0.315   -0.275    0.137
## 37 36  largerot             157           159     -0.215   -0.210    0.583
## 38 37  largerot             175           180     -0.125   -0.105    0.288
## 39 38  smallmir              27            32     -0.865   -0.845    0.137
## 40 39  largemir              30            33     -0.850   -0.840    0.401
## 41 40  largemir              37            40     -0.815   -0.805    0.438
## 42 41  largemir              48            52     -0.760   -0.745    0.290
## 43 42  largemir              56            60     -0.720   -0.705    0.321
## 44 43  largemir              66            76     -0.670   -0.625    0.094
## 45 44  largemir              79            83     -0.605   -0.590    0.296
## 46 45  largemir             128           130     -0.360   -0.355    0.582

Comparison between small and large errors

plotPermTestSmallLargeLRPDiffWaves()

getSmallLargeERPPvalStats(comparison = 'SmallvsLarge', erps = 'lrp')
##   X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1 0       rot               0             6     -1.000   -0.975    0.162
## 2 1       rot              26            27     -0.870   -0.870    0.738
## 3 2       rdm              NA            NA         NA       NA       NA
## 4 3       mir              16            18     -0.920   -0.915    0.735
## 5 4       mir              39            40     -0.805   -0.805    0.764
## 6 5       mir              50            51     -0.750   -0.750    0.803
## 7 6       mir              90            93     -0.550   -0.540    0.565
## 8 7       mir             107           109     -0.465   -0.460    0.632
## 9 8       mir             139           143     -0.305   -0.290    0.422

We find no differences between small and large errors during movement preparation across perturbation types.

Comparison across perturbation types

plotPermTestPTypeSmallLargeLRPDiffWaves()

getSmallLargeERPPvalStats(comparison = 'PerturbTypeComp', erps = 'lrp')
##   X condition clust_idx_start clust_idx_end time_start time_end p_values
## 1 0   rotvmir              NA            NA         NA       NA       NA
## 2 1   rotvrdm               8             9     -0.960   -0.960    0.643
## 3 2   rotvrdm              50            54     -0.750   -0.735    0.336
## 4 3   rotvrdm              75            85     -0.625   -0.580    0.086
## 5 4   mirvrdm              44            45     -0.780   -0.780    0.803

We find no differences across perturbation types during movement preparation.

Manuscript plots

Although we have all figures and statistical comparisons in this document, we summarize the main findings in the manuscript.

plotFeedbackERP()

plotReadinessERP()

plotLateralizedRP()

plotSubtractedLRPs()